﻿// B. Flip the Bits.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
https://codeforces.com/problemset/problem/1504/B

有一个长度为 n 的二进制字符串 a。在一次操作中，可以选择 a 的任意前缀，其 0 和 1 符号的数量相等。然后将前缀中的所有符号反转：每个 0 变为 1，每个 1 变为 0。
例如，假设 a=0111010000。

在第一次操作中，我们可以选择长度为 8 的前缀，因为它有四个 0
和四个 1： [01110100]00→[10001011]00.
在第二次操作中，我们可以选择长度为 2 的前缀，因为它有一个 0 和一个 1：[10]00101100→[01]00101100。
在第三次操作中，选择长度为 4 的前缀是不合法的，因为它有三个 0 和一个 1。
你能用有限次的运算（可能一次都不用）将字符串 a 转换成字符串 b 吗？

输入
第一行包含一个整数 t（1≤t≤104）--测试用例数。

每个测试用例的第一行包含一个整数 n（1≤n≤3⋅105）--字符串 a 和 b 的长度。

下面两行包含长度为 n 的字符串 a 和 b，由符号 0 和 1 组成。

所有测试用例中 n 的总和不超过 3⋅105。

输出
对于每个测试用例，如果可以将 a 转换为 b，则输出 “是”；如果不可能，则输出 “否”。您可以用任何大小写（大写或小写）打印每个字母。

InputCopy
5
10
0111010000
0100101100
4
0000
0000
3
001
000
12
010101010101
100110011010
6
000111
110100
OutputCopy
YES
YES
NO
YES
NO


注释
第一个测试用例如语句所示。

在第二个测试用例中，我们通过零运算将 a 转换为 b。

在第三个测试用例中，没有合法的操作，因此不可能将 a 变换成 b。

在第四个测试用例中，这里有一个这样的变换：

选择长度为 2 的前缀，得到 100101010101。
选择长度为 12 的前缀，得到 011010101010。
选择长度为 8 的前缀，得到 100101011010。
选择长度为 4 的前缀，得到 011001011010。
选择长度为 6 的前缀，得到 100110011010。
在第五个测试用例中，唯一合法的操作是将 a 转换为 111000。从这里开始，唯一合法的操作是返回到我们开始时的字符串，因此我们不能将 a 转换为 b。

*/

#include <iostream>
#include <cstring>

using namespace std; 

const int N = 300010;
int T, n;
char a[N], b[N];
int pre[N];


void solve() {
	memset(a, 0, sizeof a);
	memset(b, 0, sizeof b);
	memset(pre, 0, sizeof pre);	
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		pre[i] = pre[i - 1] + (a[i]-'0');
	}

	for (int i = 1; i <= n; i++) {
		cin >> b[i];
	}
	int opcnt = 0;
	for (int i = n; i >= 1; i--) {
		if (a[i] != b[i] && opcnt%2==0) {
			//需要翻转 检查是否能翻转
			int len = i - 1 + 1;
			if (len - pre[i] != pre[i]) {
				cout << "NO" << endl;
				return;
			}
			else {
				opcnt++;
			}
		}
		else if(a[i] == b[i] && opcnt % 2 == 1) {
			//需要翻转 检查是否能翻转
			int len = i - 1 + 1;
			if (len - pre[i] != pre[i]) {
				cout << "NO" << endl;
				return;
			}
			else {
				opcnt++;
			}
		}
	}

	cout << "YES" << endl;
}



int main()
{
	cin >> T;
	while (T--) {
		solve();
	}

}

 